#include "Button.hpp"

namespace gui
{

Button::Button(const std::string& newText) :
    Frame(),
    myButtonText(newText)
{
    Update();
}

void Button::SetText(const std::string& newText)
{
    myButtonText.SetString(newText);
    Update();
}

const std::string Button::GetText() const
{
    return myButtonText.GetString();
}

void Button::SetTextColor(const sf::Color& color)
{
    myButtonText.SetColor(color);
}

const sf::Color& Button::GetTextColor() const
{
    return myButtonText.GetColor();
}

void Button::Render(sf::RenderTarget& target, sf::Renderer& renderer) const
{
    Widget::RenderWidget(target,renderer);
    Frame::RenderWidget(target,renderer);

    target.Draw(myButtonText);
}

void Button::OnMouseClicked(sf::Event& event)
{
    //SetTextColor(sf::Color::Blue);
}

void Button::OnMouseEntered(sf::Event& event)
{
    if(!myIsPressed)
        SetTextColor(sf::Color::Red);
}

void Button::OnMouseLeft(sf::Event& event)
{
    if(!myIsPressed)
        SetTextColor(sf::Color::Black);
}

void Button::OnMouseButtonPressed(sf::Event& event)
{
    myIsPressed = true;
    SetTextColor(sf::Color::Blue);
}

void Button::OnMouseButtonReleased(sf::Event& event, bool onMe)
{
    if(onMe)
        SetTextColor(sf::Color::Red);

    else
        SetTextColor(sf::Color::Black);

    myIsPressed = false;
}

void Button::Update()
{
    myRect.Right = myButtonText.GetRect().GetSize().x + 20;
    myRect.Bottom = myButtonText.GetRect().GetSize().y + 10;

    myButtonText.SetPosition(myRect.GetCenter().x-myButtonText.GetRect().GetSize().x/2,
                            myRect.GetCenter().y-myButtonText.GetRect().GetSize().y/2);
}

}

